<?php
namespace app\admin\model;

use think\Model;
use think\Db;
use app\admin\model\RoleModel;
use app\admin\model\DepartmentModel;
use app\admin\controller\Role;

class UserModel extends Model
{
    // 确定链接表名
    protected $name = 'user';

    /**
     * 根据搜索条件获取用户列表信息
     * @param $where
     * @param $offset
     * @param $limit
     */
    public function getUsersByWhere($where=[],$whereOr=[],$offset,$limit)
    {
        // return $this->alias('user')->field( 'user.*,role_name')
        //     ->join('role rol', 'user.role_id = ' . 'rol.id')
        //     ->where($where)->where(function($query)use($whereOr){
		// 		foreach($whereOr as $k => $v){
		// 			$query->whereOr($k,"like","%".$v."%");
		// 		}
		// 	})->limit($offset, $limit)->order('id desc')->select();
		$cansee = session('can_see');
		return $this->alias('user')->field( 'user.*,role_name')
			->join('role rol', 'user.role_id = ' . 'rol.id')
			->where($where)
			->where(function($query)use($whereOr){
				foreach($whereOr as $k => $v){
					$query->whereOr($k,"like","%".$v."%");
				}
			})
			->where(function($query)use($cansee){
				foreach($cansee as $v){
					if(isset($v['create_uid'])){
						$query->whereOr('user.id',$v['create_uid']);
					}
				}
			})
			->limit($offset, $limit)->order('id desc')->select();
    }

    /**
     * 根据搜索条件获取所有的用户数量
     * @param $where
     */
    public function getAllUsers($where,$whereOr)
    {
		$cansee = session('can_see');
        return $this->alias('user')->join('role rol', 'user.role_id = ' . 'rol.id')
		->where($where)->where(function($query)use($whereOr){
			foreach($whereOr as $k => $v){
				$query->whereOr($k,"like","%".$v."%");
			}
		})->where(function($query)use($cansee){
			foreach($cansee as $v){
				if(isset($v['create_uid'])){
					$query->whereOr('user.id',$v['create_uid']);
				}
			}
		})->count();
    }

    /**
     * 插入管理员信息
     * @param $param
     */
	 public function insertUser($param){
         $this::startTrans();
         try{
             $result =  $this->validate('UserValidate')->allowField(true)->save($param);
             if(false === $result){
                 // 验证失败 输出错误信息
                 return msg(-1, '', $this->getError());
             }else{
 				// 重新写入所有角色的可视权限
 				$allRoles = DB::name('role')->where('id','<>',1)->where('department_id','<>',0)->select();
 				$roleCtrl = new Role();
 				foreach($allRoles as $k => $v){
 					$roleCtrl->autoGiveSee($v['can_see_type'],$v['id']);
 				}
 				$this::commit();
                 return msg(1, url('user/index'), '添加用户成功');
             }
         }catch(\Exception $e){
             $this::rollback();
             return msg(-2, '', $e->getMessage());
         }
     }

    /**
     * 编辑管理员信息
     * @param $param
     */
    public function editUser($param)
    {
        try{

            $result =  $this->validate('UserValidate')->save($param, ['id' => $param['id']]);

            if(false === $result){
                // 验证失败 输出错误信息
                return msg(-1, '', $this->getError());
            }else{

                return msg(1, url('user/index'), '编辑用户成功');
            }
        }catch(PDOException $e){
            return msg(-2, '', $e->getMessage());
        }
    }

    /**
     * 根据管理员id获取角色信息
     * @param $id
     */
    public function getOneUser($id)
    {
        return $this->where('id', $id)->find();
    }

    /**
     * 删除管理员
     * @param $id
     */
    public function delUser($id){
        try{
            $this->where('id', $id)->delete();
			DB::name('users_company')->where('uid',$id)->delete();
			DB::name('users_government')->where('uid',$id)->delete();
            return msg(1, '', '删除管理员成功');
        }catch( PDOException $e){
            return msg(-1, '', $e->getMessage());
        }
    }

    /**
     * 根据用户名获取管理员信息
     * @param $name
     */
    public function findUserByName($name)
    {
        return $this->where('user_name', $name)->find();
    }

    /**
     * 更新管理员状态
     * @param array $param
     */
    public function updateStatus($param = [], $uid)
    {
        try{

            $this->where('id', $uid)->update($param);
            return msg(1, '', '保存成功');
        }catch (\Exception $e){

            return msg(-1, '', $e->getMessage());
        }
    }
}
